/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mcc;

import java.util.Random;

/**
 *
 * @author julien
 */
public class Modele {

    static int NB_CASE_MEMOIRE = 7;
    static int POIDS_MAX = 4;
    private int nbCoup;
    private int[] coupsJoues;
    private int[] poids;

    public Modele() {
        nbCoup = 0;
        coupsJoues = new int[NB_CASE_MEMOIRE];
        poids = new int[NB_CASE_MEMOIRE];
        for (int i = 0; i < NB_CASE_MEMOIRE; i++) {
            coupsJoues[i] = 0;
            poids[i] = 0;
        }
    }

    public String getStringCoupsJouesMemoire() {
        String s = new String();
        for (int i = coupsJoues.length - 1; i >= 0; i--) {
            s += coupsJoues[i];
        }

        return s;
    }

    public int getPoidsMax() {
        int poidsMax = 0;
        for (int i = 0; i < poids.length; i++) {
            if (poids[i] > poidsMax) {
                poidsMax = poids[0];
            }
        }
        return poidsMax;
    }

    public int choisirHasard() {
        Random r = new Random();
        return 1 + r.nextInt(Jeu.NB_GOBELETS);
    }

    public void ajouterCoupJoue(int positionObjetCache, boolean trouve) {

        // on ajoute la valeur au coups de la partie
        for (int i = coupsJoues.length - 1; i > 0; i--) {
            // on decale les valeurs d'un cran à droite
            coupsJoues[i] = coupsJoues[i - 1];
        }
        // on aj oute le coup qui viens d'etre joue au début en premiere position
        coupsJoues[0] = positionObjetCache;

        // si on a trouve la position de l'objet cache
        // et que son poids est inferieur au poids max
        if (trouve && poids[0] < POIDS_MAX) {
            // on augmente son poids
            poids[0]++;
        }

        // pour tous les poids
        for (int i = 1; i < poids.length; i++) {
            // si la position du coup est egale a la position a trouvee
            // et que le poids de ce coup est inferieur au poids max
            if (coupsJoues[i] == positionObjetCache && poids[i] < POIDS_MAX) {
                // on aumente son poids
                poids[i]++;
            }
        }
    }

    public int choisirCoup() {
        nbCoup++;

        switch (nbCoup) {
            case 10:
                Modele.POIDS_MAX = 4;
                break;
            case 20:
                Modele.POIDS_MAX = 4;
                break;
            case 30:
                Modele.POIDS_MAX = 6;
                break;
            case 40:
                Modele.POIDS_MAX = 7;
                break;
            case 70:
                Modele.POIDS_MAX = 50;
                break;
            case 200:
                Modele.POIDS_MAX = 100;
                break;
            default:
                break;
        }


        int poidsMax = getPoidsMax();
        if (poidsMax > 0) {
            for (int i = poids.length - 1; i > 0; i--) {
                if (poids[i] == poidsMax) {
                    int j;
                    for (j = i - 1; j > 0 && poids[j] == poidsMax; j--) {
                    }
                    // attention danger ?
                    return coupsJoues[j + 1];
                }
            }
            return choisirHasard();
        } else {
            return choisirHasard();
        }
    }
}
